<?php
class Cache{
	//缓存目录
	public $dir;

	public function __construct($dir='cache')
	{
		$this->dir = $dir;
		//创建缓存目录  没有就创建
		is_dir($this->dir) or mkdir($this->dir,0777,true);
	}
	
	//获取缓存文件
	private function getFile($name)
	{	
		// print_r($name);exit;
		return $this->dir.'/'.md5($name).'.php';
	}

	//检测缓存是否有效
	public function has($name)
	{	
		// 获得的缓存文件
		$file = $this->getFile($name);

		if(is_file($file))
		{	
			// 将整个文件读入
			$content = file_get_contents($file);
			// 提取字符串
			$time = substr($content,32,10);

			//在缓存期内   文件的修改时间
			if(filemtime($file)+$time>time())
			{
				return true;
			}
		}
		return false;
	}

	//设置缓存  
	public function set($name,$value,$expire=3600)
	{
		$file = $this->getFile($name);

		if($this->has($name))
		{
			return true;
		}
		
		//缓存过期时间   填充10个0    00000000003600
		$expire = str_pad ($expire ,  10 ,  "0" ,  STR_PAD_LEFT );
			//保存缓存数据  PHP_EOL为换行符
		$data = '<?php if(!defined("HD"))exit;?>'.PHP_EOL.
		// serialize  序列化字符串
		$expire.PHP_EOL.serialize($value);
		// 写入文件
		return file_put_contents($file,$data);
		
	}

	//获取缓存数据
	public function get($name)
	{	
		if($this->has($name))
		{
			$file = $this->getFile($name);
			// 读取文件的内容
			$data  =file_get_contents($file);	

			$data =substr($data,43);
			// 返回的是转换之后的值
			return unserialize($data);
		}
	}

	//删除一个缓存数据
	public function del($name)
	{	
		$file = $this->getFile($name);

		if(is_file($file))
		{
			return unlink($file);
		}
		return true;
	}

	//全删除
	public function flush()
	{	
		
		foreach (glob($this->dir.'/*.*') as $file) {
			if(is_file($file) && @unlink($file))
			{
				return false;
			}
		}
		return true;
	}
}